/**
 * [27] 移除元素
 *
 * @format
 * @lc app=leetcode.cn id=27 lang=javascript
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */

// 三目运算符 压缩代码
var removeElement = function (nums, val) {
    let [left, right] = [0, nums.length - 1]
    while (left < right)
        nums[right] == val
            ? nums[left] == val
                ? right--
                : (left++, right--)
            : nums[left] == val
            ? (([nums[left], nums[right]] = [nums[right], nums[left]]),
              left++,
              right--)
            : left++
    return nums[left] != val && left == right ? left + 1 : left
}
// 双指针 交换
// var removeElement = function (nums, val) {
//     let [left, right] = [0, nums.length - 1]
//     while (left < right) {
//         if (nums[right] == val) {
//             if (nums[left] == val) {
//                 // val val
//                 right--
//             } else {
//                 // num val
//                 left++
//                 right--
//             }
//         } else {
//             if (nums[left] == val) {
//                 // val num
//                 ;[nums[left], nums[right]] = [nums[right], nums[left]]
//                 // nums[left] += nums[right]
//                 // nums[right] = nums[left] - nums[right]
//                 // nums[left] -= nums[right]
//                 left++
//                 right--
//             } else {
//                 // num num
//                 left++
//             }
//         }
//     }
//     //  L = R - 1
//     //  L   R  len
//     // n num num v L+1 R+1 L=R=R
//     // n num val v L   R+1 L>R
//     // n val num v L   R+1 L>R
//     // n val val v L   R   L=R=L
//     return nums[left] != val && left == right ? left + 1 : left
// }
// @lc code=end
